﻿//Copyright (c) Microsoft Corporation
//
//All rights reserved. 
//
//Licensed under the Apache License, Version 2.0 (the ""License""); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 
//THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. 
//
//See the Apache Version 2.0 License for specific language governing permissions and limitations under the License.
using System;
using System.IO;
using System.Threading.Tasks;
using Windows.Storage;

namespace TED.WindowsAzure.Unplugged.Mobile.Tests.Helpers
{
    public class LocalStorageHelper
    {
        public LocalStorageHelper()
        {
        }

        public async Task CleanUp()
        {
            try
            {
                IStorageFolder folder =
                    Windows.Storage.ApplicationData.Current.LocalFolder;
                var f = await folder.GetFileAsync("blobinfo.sqlite");
                await f.DeleteAsync();

                foreach (var storageFolder in await folder.GetFoldersAsync())
                {
                    await storageFolder.DeleteAsync();
                }
            }
            catch (Exception)
            {
            }
        }

        public async Task<int> GetCountAsync(string folderName = "")
        {
            IStorageFolder folder = Windows.Storage.ApplicationData.Current.LocalFolder;

            try
            {
                if (!String.IsNullOrEmpty(folderName))
                    folder = await folder.GetFolderAsync(folderName);
            }
            catch (FileNotFoundException)
            {
                return 0;
            }

            return (await folder.GetFilesAsync()).Count;
        }

        public async Task<IStorageFile> GetFileAsync(string fileName)
        {
            IStorageFolder folder = Windows.Storage.ApplicationData.Current.LocalFolder;

            try
            {
                return await folder.GetFileAsync(fileName);
            }
            catch (FileNotFoundException)
            {
                return null;
            }
        }

        public async Task<string> GetFileContentAsync(string path)
        {
            var file = await GetFileAsync(path);

            if (file != null)
            {
                using (var reader = new StreamReader(await file.OpenStreamForReadAsync()))
                {
                    return await reader.ReadToEndAsync();
                }
            }
            else
            {
                return "";
            }
        }
    }
}
